﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Data;
using dao.daos;
using negocio.entidades;

namespace negocio.servicios
{
    public class ClubService
    {
        private ClubDao dao = new ClubDao();

        public DataTable ObtenerTodo()
        {
            DataTable dt = new DataTable();
            dt.Load(dao.ObtenerTodo());
            return dt;
        }

        public Club ObtenerPorId(int id)
        {
            return LeerDataReader(dao.ObtenerPorId(id));
        }

        public void Eliminar(Club busObject)
        {
            dao.Eliminar(busObject.Id);
            
        }

        public void Eliminar(int id)
        {
            dao.Eliminar(id);
        }

        public bool Insertar(Club club)
        {
            bool exito = false;

            string[] val = GenerarStringValoresArray(club);
            string query = "SET DATEFORMAT dmy; INSERT INTO clubes (razon_social, direccion, codPostal, email, telefono, id_barrio, isPrivado, fecha_fundacion) VALUES ('" + val[0] + "', '" + val[1] + "', " + val[2] + ", '" + val[3] + "', '" + val[4] + "', " + val[5] + ", " + val[6] + ", '" + val[7] + "')";
            
            dao.Insertar(query);
            exito = true;
            if (dao.Existe(club.RazonSocial) == false)
            {

            }
            return exito;
        }


        private String[] GenerarStringValoresArray(Club c)
        {
            String[] vect = new string[8];

            vect[0] = c.RazonSocial.ToString();
            vect[1] = c.Direccion.ToString();
            vect[2] = c.CodigoPostal.ToString();
            vect[3] = c.Email.ToString();
            vect[4] = c.Telefono.ToString();
            vect[5] = c.IdBarrio.ToString();
            vect[6] = c.IsPrivado.ToString();
            vect[7] = c.FechaFundacion.ToString();

            return vect;
        }

        private string GenerarStringValores(Club c)
        {
            string valores =
                string.Format(
                    "razon_social ='{0}', direccion ='{1}', codPostal ={2}, email ='{3}', telefono ={4}, id_barrio ={5}, isPrivado ={6}, fecha_fundacion ='{7}'",
                    c.RazonSocial.ToString(),
                    c.Direccion.ToString(),
                    c.CodigoPostal.ToString(),
                    c.Email.ToString(),
                    c.Telefono.ToString(),
                    c.IdBarrio.ToString(),
                    c.IsPrivado.ToString(),
                    c.FechaFundacion.ToString());

            return valores;
        }

        public DataTable Buscar(string nombre)
        {
            return dao.ObtenerPorNombre(nombre);
        }


        public void Modificar(Club club)
        {
            string valores = GenerarStringValores(club);
            string restriccion = string.Format("cod_club = {0}", club.Id);
            string query = "SET DATEFORMAT dmy; UPDATE clubes SET " + valores + " WHERE " + restriccion;
            dao.Modificar(query);
        }

        private Club LeerDataReader(DataTable oti)
        {
            var fila = oti.Rows[0];
            Club bus= new Club();
            bus.Id = Convert.ToInt32(fila["ID_CLUB"]);
            bus.RazonSocial = Convert.ToString(fila["razon_social"]);
            bus.IdBarrio = Convert.ToInt32(fila["id_barrio"]);
            bus.IsPrivado = Convert.ToInt32(fila["isPrivado"]);
                bus.Direccion = Convert.ToString(fila["direccion"]);
                bus.CodigoPostal = Convert.ToInt32(fila["codPostal"]);
                bus.Email = Convert.ToString(fila["email"]);
                bus.Telefono = Convert.ToString(fila["telefono"]);
                bus.FechaFundacion = Convert.ToDateTime(fila["fecha_fundacion"]);
            return bus;
        }


        private List<Club> LeerDataReaderList(SqlDataReader ot)
        {
            List<Club> listBus = new List<Club>();
            while (ot.Read())
            {
                Club bus = new Club();
                bus.Id = Convert.ToInt32(ot["cod_club"]);
                bus.RazonSocial = Convert.ToString(ot["razon_social"]);
                bus.IdBarrio = Convert.ToInt32(ot["id_barrio"]);
                bus.IsPrivado = Convert.ToInt32(ot["isPrivado"]);
                bus.Direccion = Convert.ToString(ot["direccion"]);
                bus.CodigoPostal = Convert.ToInt32(ot["codPostal"]);
                bus.Email = Convert.ToString(ot["email"]);
                bus.Telefono = Convert.ToString(ot["telefono"]);
                bus.FechaFundacion = Convert.ToDateTime(ot["fecha_fundacion"]);
                listBus.Add(bus);
            }
            ot.Close();
            return listBus;
        }

        public int obtenerNuevoId()
        {
            return dao.getRows() + 1;
        }
    }
}
